{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction to Predictive Maintenance\n",
    "\n",
    "#### Author Nagdev Amruthnath\n",
    "Date: 1/9/2019\n",
    "\n",
    "##### Citation Info\n",
    "If you are using this for your research, please use the following for citation. \n",
    "\n",
    "Amruthnath, Nagdev, and Tarun Gupta. \"A research study on unsupervised machine learning algorithms for early fault detection in predictive maintenance.\" In 2018 5th International Conference on Industrial Engineering and Applications (ICIEA), pp. 355-361. IEEE, 2018.\n",
    "\n",
    "##### Disclaimer\n",
    "This is a tutorial for performing fault detection using machine learning. You this code at your own risk. I do not gurantee that this would work as shown below. If you have any suggestions please branch this project.\n",
    "\n",
    "## Introduction\n",
    "This is the first of four part demostration series of using machine learning for predictive maintenance.   \n",
    "\n",
    "The area of predictive maintenance has taken a lot of prominence in the last couple of years due to various reasons. With new algorithms and methodologies growing across different learning methods, it has remained a challenge for industries to adopt which method is fit, robust and provide most accurate detection. Fault detection is one of the critical components of predictive maintenance; it is very much needed for industries to detect faults early and accurately. In a production environment, to minimize the cost of maintenance, sometimes it is required to build a model with minimal or no historical data. In such cases, unsupervised learning would be a better option model building. In this paper, we have chosen a simple vibration data collected from an exhaust fan, and have fit different unsupervised learning algorithms such as PCA T2 statistic, Hierarchical clustering, K-Means, Fuzzy C-Means clustering and model-based clustering to test its accuracy, performance, and robustness. In the end, we have proposed a methodology to benchmark different algorithms and choosing the final model\n",
    "\n",
    "\n",
    "## Load libraries "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:52:03.700594Z",
     "start_time": "2019-01-09T21:52:03.648Z"
    }
   },
   "outputs": [],
   "source": [
    "options(warn=-1)\n",
    "\n",
    "# load libraries\n",
    "library(mdatools) #mdatools version 0.9.1\n",
    "library(caret)\n",
    "library(foreach)\n",
    "library(dplyr)\n",
    "library(mclust)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load data\n",
    "Here we are using data from a bench press. There are total of four different states in this machine and they are split into four different csv files. We need to load the data first. In the data time represents the time between samples, ax is the acceleration on x axis, ay is the acceleration on y axis, az is the acceleration on z axis and at is the G's. The data was collected at sample rate of 100hz.   \n",
    "\n",
    "Four different states of the machine were collected  \n",
    "1. Nothing attached to drill press\n",
    "2. Wooden base attached to drill press\n",
    "3. Imbalance created by adding weight to one end of wooden base\n",
    "4. Imbalacne created by adding weight to two ends of wooden base."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:39.856426Z",
     "start_time": "2019-01-09T21:50:35.415Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<thead><tr><th scope=col>time</th><th scope=col>ax</th><th scope=col>ay</th><th scope=col>az</th><th scope=col>aT</th></tr></thead>\n",
       "<tbody>\n",
       "\t<tr><td>0.002  </td><td>-0.3246</td><td> 0.2748</td><td> 0.1502</td><td>0.451  </td></tr>\n",
       "\t<tr><td>0.009  </td><td> 0.6020</td><td>-0.1900</td><td>-0.3227</td><td>0.709  </td></tr>\n",
       "\t<tr><td>0.019  </td><td> 0.9787</td><td> 0.3258</td><td> 0.0124</td><td>1.032  </td></tr>\n",
       "\t<tr><td>0.027  </td><td> 0.6141</td><td>-0.4179</td><td> 0.0471</td><td>0.744  </td></tr>\n",
       "\t<tr><td>0.038  </td><td>-0.3218</td><td>-0.6389</td><td>-0.4259</td><td>0.833  </td></tr>\n",
       "\t<tr><td>0.047  </td><td>-0.3607</td><td> 0.1332</td><td>-0.1291</td><td>0.406  </td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "\\begin{tabular}{r|lllll}\n",
       " time & ax & ay & az & aT\\\\\n",
       "\\hline\n",
       "\t 0.002   & -0.3246 &  0.2748 &  0.1502 & 0.451  \\\\\n",
       "\t 0.009   &  0.6020 & -0.1900 & -0.3227 & 0.709  \\\\\n",
       "\t 0.019   &  0.9787 &  0.3258 &  0.0124 & 1.032  \\\\\n",
       "\t 0.027   &  0.6141 & -0.4179 &  0.0471 & 0.744  \\\\\n",
       "\t 0.038   & -0.3218 & -0.6389 & -0.4259 & 0.833  \\\\\n",
       "\t 0.047   & -0.3607 &  0.1332 & -0.1291 & 0.406  \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "| time | ax | ay | az | aT |\n",
       "|---|---|---|---|---|\n",
       "| 0.002   | -0.3246 |  0.2748 |  0.1502 | 0.451   |\n",
       "| 0.009   |  0.6020 | -0.1900 | -0.3227 | 0.709   |\n",
       "| 0.019   |  0.9787 |  0.3258 |  0.0124 | 1.032   |\n",
       "| 0.027   |  0.6141 | -0.4179 |  0.0471 | 0.744   |\n",
       "| 0.038   | -0.3218 | -0.6389 | -0.4259 | 0.833   |\n",
       "| 0.047   | -0.3607 |  0.1332 | -0.1291 | 0.406   |\n",
       "\n"
      ],
      "text/plain": [
       "  time  ax      ay      az      aT   \n",
       "1 0.002 -0.3246  0.2748  0.1502 0.451\n",
       "2 0.009  0.6020 -0.1900 -0.3227 0.709\n",
       "3 0.019  0.9787  0.3258  0.0124 1.032\n",
       "4 0.027  0.6141 -0.4179  0.0471 0.744\n",
       "5 0.038 -0.3218 -0.6389 -0.4259 0.833\n",
       "6 0.047 -0.3607  0.1332 -0.1291 0.406"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#setwd(\"/Experiment\")\n",
    "#read csv files\n",
    "file1 = read.csv(\"dry run.csv\", sep=\",\", header =T)\n",
    "file2 = read.csv(\"base.csv\", sep=\",\", header =T)\n",
    "file3 = read.csv(\"imbalance 1.csv\", sep=\",\", header =T)\n",
    "file4 = read.csv(\"imbalance 2.csv\", sep=\",\", header =T)\n",
    "head(file1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can look at the summary of each file using summary function in R. Below, we can observe that 66 seconds long data is available. We also have min, max and mean for each of the variables. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:39.934426Z",
     "start_time": "2019-01-09T21:50:35.418Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "      time              ax                 ay                  az         \n",
       " Min.   : 0.002   Min.   :-2.11880   Min.   :-2.143600   Min.   :-4.1744  \n",
       " 1st Qu.:16.507   1st Qu.:-0.41478   1st Qu.:-0.625250   1st Qu.:-0.7359  \n",
       " Median :33.044   Median : 0.02960   Median :-0.022050   Median :-0.1468  \n",
       " Mean   :33.037   Mean   : 0.01233   Mean   : 0.008697   Mean   :-0.1021  \n",
       " 3rd Qu.:49.535   3rd Qu.: 0.46003   3rd Qu.: 0.641700   3rd Qu.: 0.4298  \n",
       " Max.   :66.033   Max.   : 2.09620   Max.   : 2.003000   Max.   : 4.9466  \n",
       "       aT       \n",
       " Min.   :0.032  \n",
       " 1st Qu.:0.848  \n",
       " Median :1.169  \n",
       " Mean   :1.277  \n",
       " 3rd Qu.:1.579  \n",
       " Max.   :5.013  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summary of each file\n",
    "summary(file1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Aggregration and feature extraction\n",
    "Here, the data is aggregated by 1 minute and features are extracted. Features are extracted to reduce the dimension of the data and only storing the representation of the data. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:40.370435Z",
     "start_time": "2019-01-09T21:50:35.422Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<thead><tr><th scope=col>group</th><th scope=col>ax_mean</th><th scope=col>ax_sd</th><th scope=col>ax_min</th><th scope=col>ax_max</th><th scope=col>ax_median</th><th scope=col>ay_mean</th><th scope=col>ay_sd</th><th scope=col>ay_min</th><th scope=col>ay_may</th><th scope=col>...</th><th scope=col>az_mean</th><th scope=col>az_sd</th><th scope=col>az_min</th><th scope=col>az_maz</th><th scope=col>az_median</th><th scope=col>aT_mean</th><th scope=col>aT_sd</th><th scope=col>aT_min</th><th scope=col>aT_maT</th><th scope=col>aT_median</th></tr></thead>\n",
       "<tbody>\n",
       "\t<tr><td>0            </td><td>-0.038164706 </td><td>0.6594686    </td><td>-1.2587      </td><td>1.3821       </td><td>-0.0955      </td><td>-0.0682627451</td><td>0.7506785    </td><td>-1.3892      </td><td>1.6418       </td><td>...          </td><td>-0.13803333  </td><td>0.9845115    </td><td>-2.6753      </td><td>2.7507       </td><td> 0.0254      </td><td>1.273216     </td><td>0.5830149    </td><td>0.400        </td><td>3.029        </td><td>1.0770       </td></tr>\n",
       "\t<tr><td>1            </td><td>-0.005806122 </td><td>0.6325808    </td><td>-1.6194      </td><td>1.1943       </td><td>-0.0015      </td><td> 0.0037908163</td><td>0.7819044    </td><td>-1.5625      </td><td>1.5428       </td><td>...          </td><td>-0.20496837  </td><td>0.9252188    </td><td>-3.0774      </td><td>2.7158       </td><td>-0.2121      </td><td>1.263622     </td><td>0.5448447    </td><td>0.410        </td><td>3.197        </td><td>1.1375       </td></tr>\n",
       "\t<tr><td>2            </td><td> 0.069845455 </td><td>0.6665500    </td><td>-1.4554      </td><td>1.4667       </td><td> 0.1070      </td><td> 0.0744333333</td><td>0.8022922    </td><td>-1.4800      </td><td>1.7951       </td><td>...          </td><td>-0.06405354  </td><td>0.9293866    </td><td>-1.8205      </td><td>2.4862       </td><td>-0.1512      </td><td>1.298364     </td><td>0.5131552    </td><td>0.255        </td><td>2.644        </td><td>1.2830       </td></tr>\n",
       "\t<tr><td>3            </td><td> 0.011552525 </td><td>0.5511310    </td><td>-1.9254      </td><td>1.2034       </td><td> 0.0675      </td><td> 0.0008262626</td><td>0.7894209    </td><td>-2.0042      </td><td>1.5577       </td><td>...          </td><td>-0.09287879  </td><td>0.8893505    </td><td>-2.1562      </td><td>3.2355       </td><td>-0.1672      </td><td>1.203848     </td><td>0.5125826    </td><td>0.393        </td><td>3.322        </td><td>1.1180       </td></tr>\n",
       "\t<tr><td>4            </td><td> 0.046688119 </td><td>0.6426574    </td><td>-1.7805      </td><td>1.4837       </td><td> 0.0836      </td><td>-0.0177594059</td><td>0.7510811    </td><td>-1.6629      </td><td>1.4369       </td><td>...          </td><td>-0.13990000  </td><td>0.9265720    </td><td>-1.8515      </td><td>3.5451       </td><td>-0.1741      </td><td>1.226267     </td><td>0.5824608    </td><td>0.313        </td><td>3.597        </td><td>1.1720       </td></tr>\n",
       "\t<tr><td>5            </td><td> 0.006678788 </td><td>0.5780957    </td><td>-1.4719      </td><td>1.4355       </td><td> 0.0536      </td><td> 0.0013626263</td><td>0.7812245    </td><td>-1.6293      </td><td>1.6362       </td><td>...          </td><td>-0.16540000  </td><td>0.9091516    </td><td>-2.5561      </td><td>2.9196       </td><td>-0.2588      </td><td>1.209515     </td><td>0.5664847    </td><td>0.336        </td><td>3.035        </td><td>1.1590       </td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "\\begin{tabular}{r|lllllllllllllllllllll}\n",
       " group & ax\\_mean & ax\\_sd & ax\\_min & ax\\_max & ax\\_median & ay\\_mean & ay\\_sd & ay\\_min & ay\\_may & ... & az\\_mean & az\\_sd & az\\_min & az\\_maz & az\\_median & aT\\_mean & aT\\_sd & aT\\_min & aT\\_maT & aT\\_median\\\\\n",
       "\\hline\n",
       "\t 0             & -0.038164706  & 0.6594686     & -1.2587       & 1.3821        & -0.0955       & -0.0682627451 & 0.7506785     & -1.3892       & 1.6418        & ...           & -0.13803333   & 0.9845115     & -2.6753       & 2.7507        &  0.0254       & 1.273216      & 0.5830149     & 0.400         & 3.029         & 1.0770       \\\\\n",
       "\t 1             & -0.005806122  & 0.6325808     & -1.6194       & 1.1943        & -0.0015       &  0.0037908163 & 0.7819044     & -1.5625       & 1.5428        & ...           & -0.20496837   & 0.9252188     & -3.0774       & 2.7158        & -0.2121       & 1.263622      & 0.5448447     & 0.410         & 3.197         & 1.1375       \\\\\n",
       "\t 2             &  0.069845455  & 0.6665500     & -1.4554       & 1.4667        &  0.1070       &  0.0744333333 & 0.8022922     & -1.4800       & 1.7951        & ...           & -0.06405354   & 0.9293866     & -1.8205       & 2.4862        & -0.1512       & 1.298364      & 0.5131552     & 0.255         & 2.644         & 1.2830       \\\\\n",
       "\t 3             &  0.011552525  & 0.5511310     & -1.9254       & 1.2034        &  0.0675       &  0.0008262626 & 0.7894209     & -2.0042       & 1.5577        & ...           & -0.09287879   & 0.8893505     & -2.1562       & 3.2355        & -0.1672       & 1.203848      & 0.5125826     & 0.393         & 3.322         & 1.1180       \\\\\n",
       "\t 4             &  0.046688119  & 0.6426574     & -1.7805       & 1.4837        &  0.0836       & -0.0177594059 & 0.7510811     & -1.6629       & 1.4369        & ...           & -0.13990000   & 0.9265720     & -1.8515       & 3.5451        & -0.1741       & 1.226267      & 0.5824608     & 0.313         & 3.597         & 1.1720       \\\\\n",
       "\t 5             &  0.006678788  & 0.5780957     & -1.4719       & 1.4355        &  0.0536       &  0.0013626263 & 0.7812245     & -1.6293       & 1.6362        & ...           & -0.16540000   & 0.9091516     & -2.5561       & 2.9196        & -0.2588       & 1.209515      & 0.5664847     & 0.336         & 3.035         & 1.1590       \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "| group | ax_mean | ax_sd | ax_min | ax_max | ax_median | ay_mean | ay_sd | ay_min | ay_may | ... | az_mean | az_sd | az_min | az_maz | az_median | aT_mean | aT_sd | aT_min | aT_maT | aT_median |\n",
       "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n",
       "| 0             | -0.038164706  | 0.6594686     | -1.2587       | 1.3821        | -0.0955       | -0.0682627451 | 0.7506785     | -1.3892       | 1.6418        | ...           | -0.13803333   | 0.9845115     | -2.6753       | 2.7507        |  0.0254       | 1.273216      | 0.5830149     | 0.400         | 3.029         | 1.0770        |\n",
       "| 1             | -0.005806122  | 0.6325808     | -1.6194       | 1.1943        | -0.0015       |  0.0037908163 | 0.7819044     | -1.5625       | 1.5428        | ...           | -0.20496837   | 0.9252188     | -3.0774       | 2.7158        | -0.2121       | 1.263622      | 0.5448447     | 0.410         | 3.197         | 1.1375        |\n",
       "| 2             |  0.069845455  | 0.6665500     | -1.4554       | 1.4667        |  0.1070       |  0.0744333333 | 0.8022922     | -1.4800       | 1.7951        | ...           | -0.06405354   | 0.9293866     | -1.8205       | 2.4862        | -0.1512       | 1.298364      | 0.5131552     | 0.255         | 2.644         | 1.2830        |\n",
       "| 3             |  0.011552525  | 0.5511310     | -1.9254       | 1.2034        |  0.0675       |  0.0008262626 | 0.7894209     | -2.0042       | 1.5577        | ...           | -0.09287879   | 0.8893505     | -2.1562       | 3.2355        | -0.1672       | 1.203848      | 0.5125826     | 0.393         | 3.322         | 1.1180        |\n",
       "| 4             |  0.046688119  | 0.6426574     | -1.7805       | 1.4837        |  0.0836       | -0.0177594059 | 0.7510811     | -1.6629       | 1.4369        | ...           | -0.13990000   | 0.9265720     | -1.8515       | 3.5451        | -0.1741       | 1.226267      | 0.5824608     | 0.313         | 3.597         | 1.1720        |\n",
       "| 5             |  0.006678788  | 0.5780957     | -1.4719       | 1.4355        |  0.0536       |  0.0013626263 | 0.7812245     | -1.6293       | 1.6362        | ...           | -0.16540000   | 0.9091516     | -2.5561       | 2.9196        | -0.2588       | 1.209515      | 0.5664847     | 0.336         | 3.035         | 1.1590        |\n",
       "\n"
      ],
      "text/plain": [
       "  group ax_mean      ax_sd     ax_min  ax_max ax_median ay_mean       ay_sd    \n",
       "1 0     -0.038164706 0.6594686 -1.2587 1.3821 -0.0955   -0.0682627451 0.7506785\n",
       "2 1     -0.005806122 0.6325808 -1.6194 1.1943 -0.0015    0.0037908163 0.7819044\n",
       "3 2      0.069845455 0.6665500 -1.4554 1.4667  0.1070    0.0744333333 0.8022922\n",
       "4 3      0.011552525 0.5511310 -1.9254 1.2034  0.0675    0.0008262626 0.7894209\n",
       "5 4      0.046688119 0.6426574 -1.7805 1.4837  0.0836   -0.0177594059 0.7510811\n",
       "6 5      0.006678788 0.5780957 -1.4719 1.4355  0.0536    0.0013626263 0.7812245\n",
       "  ay_min  ay_may ... az_mean     az_sd     az_min  az_maz az_median aT_mean \n",
       "1 -1.3892 1.6418 ... -0.13803333 0.9845115 -2.6753 2.7507  0.0254   1.273216\n",
       "2 -1.5625 1.5428 ... -0.20496837 0.9252188 -3.0774 2.7158 -0.2121   1.263622\n",
       "3 -1.4800 1.7951 ... -0.06405354 0.9293866 -1.8205 2.4862 -0.1512   1.298364\n",
       "4 -2.0042 1.5577 ... -0.09287879 0.8893505 -2.1562 3.2355 -0.1672   1.203848\n",
       "5 -1.6629 1.4369 ... -0.13990000 0.9265720 -1.8515 3.5451 -0.1741   1.226267\n",
       "6 -1.6293 1.6362 ... -0.16540000 0.9091516 -2.5561 2.9196 -0.2588   1.209515\n",
       "  aT_sd     aT_min aT_maT aT_median\n",
       "1 0.5830149 0.400  3.029  1.0770   \n",
       "2 0.5448447 0.410  3.197  1.1375   \n",
       "3 0.5131552 0.255  2.644  1.2830   \n",
       "4 0.5125826 0.393  3.322  1.1180   \n",
       "5 0.5824608 0.313  3.597  1.1720   \n",
       "6 0.5664847 0.336  3.035  1.1590   "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "file1$group = as.factor(round(file1$time))\n",
    "file2$group = as.factor(round(file2$time))\n",
    "file3$group = as.factor(round(file3$time))\n",
    "file4$group = as.factor(round(file4$time))\n",
    "#(file1,20)\n",
    "\n",
    "#list of all files\n",
    "files = list(file1, file2, file3, file4)\n",
    "\n",
    "#loop through all files and combine\n",
    "features = NULL\n",
    "for (i in 1:4){\n",
    "res = files[[i]] %>%\n",
    "    group_by(group) %>%\n",
    "    summarize(ax_mean = mean(ax),\n",
    "              ax_sd = sd(ax),\n",
    "              ax_min = min(ax),\n",
    "              ax_max = max(ax),\n",
    "              ax_median = median(ax),\n",
    "              ay_mean = mean(ay),\n",
    "              ay_sd = sd(ay),\n",
    "              ay_min = min(ay),\n",
    "              ay_may = max(ay),\n",
    "              ay_median = median(ay),\n",
    "              az_mean = mean(az),\n",
    "              az_sd = sd(az),\n",
    "              az_min = min(az),\n",
    "              az_maz = max(az),\n",
    "              az_median = median(az),\n",
    "              aT_mean = mean(aT),\n",
    "              aT_sd = sd(aT),\n",
    "              aT_min = min(aT),\n",
    "              aT_maT = max(aT),\n",
    "              aT_median = median(aT)\n",
    "             )\n",
    "    features = rbind(features, res)\n",
    "}\n",
    "\n",
    "#view all features\n",
    "head(features)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analyzing the data through plots\n",
    "Plot all mean values to analyze the change in vibrations. From the first 3 plots we can observe that its very hard to analyze any significant change in vibration for all 4 states of the machines. On the other hand for the fourth plot we can identify 2 states of the machine. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:40.521435Z",
     "start_time": "2019-01-09T21:50:35.426Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n0tHRAAAAAElFTkSuQmCC",
      "text/plain": [
       "Plot with title \"T mean\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot data\n",
    "par(mfrow=c(4,1))\n",
    "plot(features$ax_mean, main=\"X-Axis mean\", xlab=\"Observations\", ylab=\"G's\", type=\"l\", col=\"blue\")\n",
    "plot(features$ay_mean, main=\"Y-Axis mean\", xlab=\"Observations\", ylab=\"G's\", type=\"l\", col=\"blue\")\n",
    "plot(features$az_mean, main=\"Z-Axis mean\", xlab=\"Observations\", ylab=\"G's\", type=\"l\", col=\"blue\")\n",
    "plot(features$aT_mean, main=\"T mean\", xlab=\"Observations\", ylab=\"G's\", type=\"l\", col=\"blue\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fault Detection using PCA-T2 and SPE\n",
    "Principal component analysis (PCA) is a mathematical algorithm that reduces the dimensionality of the data while retaining most of the variation (information) in the data set. T2 Statistic is a multivariate statistical analysis. SPE also referred to a Q-statistic is the square prediction error. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:40.564440Z",
     "start_time": "2019-01-09T21:50:35.429Z"
    }
   },
   "outputs": [],
   "source": [
    "pca = function(train,test,variance, alpha,gamma) {\n",
    "\n",
    "  #remove columns with zero variance\n",
    "  train = train[sapply(train, function(x) length(levels(factor(x)))>1)]\n",
    "\n",
    "  # calculate the pre-process parameters from the dataset\n",
    "  preprocessParams = preProcess(train,\n",
    "                                method=c(\"center\", \"scale\"))\n",
    "  # transform the dataset using the parameters\n",
    "  traintransformed = predict(preprocessParams, train)\n",
    "  testtransformed = predict(preprocessParams, test[,colnames(train)])\n",
    "\n",
    "  #calibrate data for\n",
    "  pca.model = mdatools::pca(x = traintransformed,\n",
    "                            x.test = testtransformed,\n",
    "                            alpha = alpha,\n",
    "                            gamma = gamma,\n",
    "                            ncomp = ncol(train))\n",
    "\n",
    "  for(i in 1:ncol(train)){\n",
    "    if(pca.model$calres$cumexpvar[i] >= variance) { break }\n",
    "  }\n",
    "\n",
    "  trainRes = data.frame(train,\n",
    "                        T2stats = pca.model$calres$T2[,i],\n",
    "                        T2critical = pca.model$calres$T2lim[1,i],\n",
    "                        T2outlier = pca.model$calres$T2lim[2,i],\n",
    "                        SPEstats = pca.model$calres$Q[,i],\n",
    "                        SPEcritical = pca.model$calres$Qlim[1,i],\n",
    "                        SPEoutlier = pca.model$calres$Qlim[2,i]\n",
    "  )\n",
    "  testRes = data.frame(test[,colnames(train)],\n",
    "                       T2stats = pca.model$testres$T2[,i],\n",
    "                       T2critical = pca.model$testres$T2lim[1,i],\n",
    "                       T2outlier = pca.model$testres$T2lim[2,i],\n",
    "                       SPEstats = pca.model$testres$Q[,i],\n",
    "                       SPEcritical = pca.model$testres$Qlim[1,i],\n",
    "                       SPEoutlier = pca.model$testres$Qlim[2,i]\n",
    "  )\n",
    "\n",
    "  return(rbind(trainRes,testRes))\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The above function is the generalized function for using PCA analysis for performing anomaly detection. The input variables are the train data, test data, alpha value, gamma value and variance among principal components. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:41.173442Z",
     "start_time": "2019-01-09T21:50:35.432Z"
    }
   },
   "outputs": [],
   "source": [
    "train = features[1:67,2:ncol(features)]\n",
    "test = features[68:nrow(features),2:ncol(features)]\n",
    "alpha = 0.05\n",
    "gamma = 0.01\n",
    "variance = 0.95\n",
    "\n",
    "#call pca function\n",
    "pca_result = pca(train,test,variance, alpha,gamma)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The below are the graphial results for PCA analysis. From the PCA-T2 results, we can observe that the annomaly model was capable of detecting the annomalies. Likewise PCA-SPE model was capable of detecting the anomalies as well. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:41.425452Z",
     "start_time": "2019-01-09T21:50:35.435Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "Plot with title \"PCA SPE Result\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot results\n",
    "par(mfrow=c(2,1))\n",
    "plot(pca_result$T2stats, main=\"PCA T2 Result\", ylab=\"stats\", xlab=\"observations\", col=\"blue\", type=\"o\")\n",
    "abline(h=pca_result$T2critical, col=\"black\")\n",
    "abline(h=pca_result$T2outlier, col=\"red\")\n",
    "\n",
    "plot(pca_result$SPEstats, main=\"PCA SPE Result\", ylab=\"stats\", xlab=\"observations\", col=\"blue\", type=\"o\")\n",
    "abline(h=pca_result$SPEcritical, col=\"black\")\n",
    "abline(h=pca_result$SPEoutlier, col=\"red\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fault detection using K-means\n",
    "K-means is one of the most common unsupervised learning clustering algorithms. This most straightforward algorithm’s goal is to divide the data set into pre-determined clusters based on distance. Here, we have used Euclidian distance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:41.474446Z",
     "start_time": "2019-01-09T21:50:35.439Z"
    }
   },
   "outputs": [],
   "source": [
    "kmeans = function(train, usePCA, variance) {\n",
    "  #remove columns with zero variance\n",
    "  train = train[sapply(train, function(x) length(levels(factor(x)))>1)]\n",
    "\n",
    "  if(usePCA == TRUE){\n",
    "    # calculate the pre-process parameters from the dataset\n",
    "    preprocessParams = preProcess(train,\n",
    "                                  method=c(\"center\", \"scale\", \"pca\"),\n",
    "                                  thresh = variance,\n",
    "                                  na.remove = T,\n",
    "                                  freqCut = 95/5,\n",
    "                                  uniqueCut = 10\n",
    "    )\n",
    "    # transform the dataset using the parameters\n",
    "    transformed = predict(preprocessParams, train)\n",
    "\n",
    "    kmRes = stats::kmeans(as.matrix(transformed),2)\n",
    "\n",
    "    return(data.frame(train,cluster=kmRes$cluster))\n",
    "  }\n",
    "\n",
    "  if(usePCA == FALSE){\n",
    "    # calculate the pre-process parameters from the dataset\n",
    "    preprocessParams = preProcess(train,\n",
    "                                  method=c(\"center\", \"scale\"),\n",
    "                                  na.remove = T\n",
    "    )\n",
    "    # transform the dataset using the parameters\n",
    "    transformed = predict(preprocessParams, train)\n",
    "\n",
    "    kmRes = stats::kmeans(transformed,2)\n",
    "\n",
    "    return(data.frame(train,cluster=kmRes$cluster))\n",
    "  }\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:42.072481Z",
     "start_time": "2019-01-09T21:50:35.442Z"
    }
   },
   "outputs": [],
   "source": [
    "#Anomaly detection without PCA\n",
    "train = features[,2:ncol(features)]\n",
    "usePCA = FALSE\n",
    "Variance = 0.95\n",
    "kmeans_res = kmeans(train, usePCA, variance)\n",
    "\n",
    "#Anomaly detection with PCA\n",
    "usePCA = TRUE\n",
    "kmeans_pca_res = kmeans(train, usePCA, variance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using the genralized function developed above, kmeans is used in two ways with and without PCA. In both the cases from the graphical results, we can observe that kmeans was capable of detecting the anomalies. Also, it is interesting to not that, kmeans grouped data in file 1 and file 2 and one state and file 3 and file 4 as other state. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:42.224462Z",
     "start_time": "2019-01-09T21:50:35.446Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "Plot with title \"Kmeans PCA Result\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot results\n",
    "par(mfrow=c(2,1))\n",
    "pca.model = prcomp(train, scale=T)\n",
    "\n",
    "plot(features$az_mean, features$aT_mean , main=\"Kmeans Result\", ylab=\"az_mean\", xlab=\"aT_mean\", col=kmeans_res$cluster ,yaxt = 'n')\n",
    "\n",
    "plot(pca.model$x, main=\"Kmeans PCA Result\", ylab=\"PC 2\", xlab=\"PC 1\", col=kmeans_pca_res$cluster, yaxt = 'n')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fault Detection using Model Based clustering\n",
    "A Gaussian mixture model (GMM) is used for modeling data that comes from one of the several groups: the groups might be different from each other, but data points within the same group can be well-modeled by a Gaussian distribution . Gaussian finite mixture model fitted by EM algorithm is an iterative algorithm where some initial random estimate starts and updates every iterate until convergence is detected . Initialization can be started based on a set of initial parameters and start E-step or set of initial weights and proceed to M-step. This step can be either set randomly or could be chosen based on some method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:50:42.265456Z",
     "start_time": "2019-01-09T21:50:35.449Z"
    }
   },
   "outputs": [],
   "source": [
    "gmm = function(train, usePCA, variance, n) {\n",
    "  #remove columns with zero variance\n",
    "  train = train[sapply(train, function(x) length(levels(factor(x)))>1)]\n",
    "  M = nrow(train)/4\n",
    "  if(usePCA == TRUE){\n",
    "    # calculate the pre-process parameters from the dataset\n",
    "    preprocessParams = preProcess(train,\n",
    "                                  method=c(\"center\", \"scale\", \"pca\"),\n",
    "                                  thresh = variance,\n",
    "                                  na.remove = T,\n",
    "                                  freqCut = 95/5,\n",
    "                                  uniqueCut = 10\n",
    "    )\n",
    "    # transform the dataset using the parameters\n",
    "    traintransformed = predict(preprocessParams, train)\n",
    "\n",
    "    m = densityMclust(traintransformed,\n",
    "                      G = n,\n",
    "                      initialization = list(subset = sample(1:nrow(traintransformed),\n",
    "                                                            size = M),\n",
    "                                            set.seed(11)))\n",
    "\n",
    "    traintransformed$y = m$classification\n",
    "    return(data.frame(traintransformed, m$z))\n",
    "  }\n",
    "\n",
    "  if(usePCA == FALSE){\n",
    "    # calculate the pre-process parameters from the dataset\n",
    "    preprocessParams = preProcess(train,\n",
    "                                  method=c(\"center\", \"scale\"),\n",
    "                                  na.remove = T\n",
    "    )\n",
    "    # transform the dataset using the parameters\n",
    "    traintransformed = predict(preprocessParams, train)\n",
    "\n",
    "    m = densityMclust(traintransformed,\n",
    "                      G = n,\n",
    "                      initialization = list(subset = sample(1:nrow(traintransformed),\n",
    "                                                            size = M),\n",
    "                                            set.seed(11)))\n",
    "\n",
    "    traintransformed$y = m$classification\n",
    "    return(data.frame(traintransformed, m$z))\n",
    "  }\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:51:00.985095Z",
     "start_time": "2019-01-09T21:50:35.452Z"
    }
   },
   "outputs": [],
   "source": [
    "#Anomaly detection without PCA\n",
    "train = features[,2:ncol(features)]\n",
    "usePCA = FALSE\n",
    "variance = 0.95\n",
    "n = 2\n",
    "gmm_res = gmm(train, usePCA, variance, n)\n",
    "\n",
    "#Anomaly detection with PCA\n",
    "usePCA = TRUE\n",
    "gmm_pca_res = gmm(train, usePCA, variance, n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:40:05.605850Z",
     "start_time": "2019-01-09T21:40:05.553Z"
    }
   },
   "source": [
    "Using the genralized function developed above, GMM is used in two ways with and without PCA. In both the cases from the graphical results, we can observe that GMM was capable of detecting the anomalies. Also, it is interesting to not that, GMM grouped data in file 1 and file 2 and one state and file 3 and file 4 as other state."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-01-09T21:51:01.130738Z",
     "start_time": "2019-01-09T21:50:35.461Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC",
      "text/plain": [
       "Plot with title \"GMM PCA Result\""
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plot results\n",
    "par(mfrow=c(2,1))\n",
    "pca.model = prcomp(train, scale=T)\n",
    "\n",
    "plot(features$az_mean, features$aT_mean , main=\"GMM Result\", ylab=\"az_mean\", xlab=\"aT_mean\", col=gmm_res$y ,yaxt = 'n')\n",
    "\n",
    "plot(pca.model$x, main=\"GMM PCA Result\", ylab=\"PC 2\", xlab=\"PC 1\", col=gmm_pca_res$y, yaxt = 'n')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### References\n",
    "\n",
    "[1] Amruthnath, Nagdev, and Tarun Gupta. \"A research study on unsupervised machine learning algorithms for early fault detection in predictive maintenance.\" In 2018 5th International Conference on Industrial Engineering and Applications (ICIEA), pp. 355-361. IEEE, 2018.\n",
    "\n",
    "[2] Amruthnath, Nagdev, and Tarun Gupta. \"Fault class prediction in unsupervised learning using model-based clustering approach.\" In Information and Computer Technologies (ICICT), 2018 International Conference on, pp. 5-12. IEEE, 2018."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },
  "language_info": {
   "codemirror_mode": "r",
   "file_extension": ".r",
   "mimetype": "text/x-r-source",
   "name": "R",
   "pygments_lexer": "r",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
